home *** CD-ROM | disk | FTP | other *** search
- /* Copyright (C) 1999 Aladdin Enterprises. All rights reserved.
-
- This file is part of AFPL Ghostscript.
-
- AFPL Ghostscript is distributed with NO WARRANTY OF ANY KIND. No author or
- distributor accepts any responsibility for the consequences of using it, or
- for whether it serves any particular purpose or works at all, unless he or
- she says so in writing. Refer to the Aladdin Free Public License (the
- "License") for full details.
-
- Every copy of AFPL Ghostscript must include a copy of the License, normally
- in a plain ASCII text file named PUBLIC. The License grants you the right
- to copy, modify and redistribute AFPL Ghostscript, but only under certain
- conditions described in the License. Among other things, the License
- requires that the copyright notice and this notice be preserved on all
- copies.
- */
-
- /*$Id: iesdata.h,v 1.2 2000/09/19 19:00:43 lpd Exp $ */
- /* Generic execution stack structure definition */
-
- #ifndef iesdata_INCLUDED
- # define iesdata_INCLUDED
-
- #include "isdata.h"
-
- /* Define the execution stack structure. */
- typedef struct exec_stack_s {
-
- ref_stack_t stack; /* the actual execution stack */
-
- /*
- * To improve performance, we cache the currentfile pointer
- * (i.e., `shallow-bind' it in Lisp terminology). The invariant is as
- * follows: either esfile points to the currentfile slot on the estack
- * (i.e., the topmost slot with an executable file), or it is 0.
- * To maintain the invariant, it is sufficient that whenever a routine
- * pushes or pops anything on the estack, if the object *might* be
- * an executable file, invoke esfile_clear_cache(); alternatively,
- * immediately after pushing an object, invoke esfile_check_cache().
- */
- ref *current_file;
-
- } exec_stack_t;
-
- /*
- * current_file is cleared by garbage collection, so we don't declare it
- * as a pointer.
- */
- #define public_st_exec_stack() /* in interp.c */\
- gs_public_st_suffix_add0(st_exec_stack, exec_stack_t, "exec_stack_t",\
- exec_stack_enum_ptrs, exec_stack_reloc_ptrs, st_ref_stack)
- #define st_exec_stack_num_ptrs st_ref_stack_num_ptrs
-
- #endif /* iesdata_INCLUDED */
-